//
//  DesEncryptor.m
//  DES加密
//
//  Created by mac on 15/8/12.
//  Copyright (c) 2015年 mac. All rights reserved.
//

#import "DesEncryptor.h"

static Byte iv[] = {2,0,1,5,1,1,2,6};

@implementation DesEncryptor

+(id)sharedDesEncryptor{
    static DesEncryptor *sharedDesEncryptor = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedDesEncryptor = [[self alloc]init];
    });
    return sharedDesEncryptor;
}

//加密方法
+(NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key

{
    
    NSString *ciphertext = nil;
    
    const char *textBytes = [plainText UTF8String];
    
    NSUInteger dataLength = [plainText length];
    
    unsigned char buffer[1024];
    
    memset(buffer, 0, sizeof(char));
    
    size_t numBytesEncrypted = 0;
    
    //CCCrypt函数 加密/解密
    /*
     DES加密 ：用CCCrypt函数加密一下，然后用base64编码下，传过去
     DES解密 ：把收到的数据根据base64，decode一下，然后再用CCCrypt函数解密，得到原本的数据
     */
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,              //  加密/解密
                                          
                                          kCCAlgorithmDES,        //  加密根据哪个标准（des，3des，aes。。。。）
                                          
                                          kCCOptionPKCS7Padding,  //  选项分组密码算法(des:对每块分组加一次密  3DES：对每块分组加三个不同的密)
                                          
                                          [key UTF8String],       //  密钥    加密和解密的密钥必须和服务端一致
                                          
                                          kCCKeySizeDES,          //  DES 密钥的长度（kCCKeySizeDES=8个字节）
                                          
                                          iv,                     //  可选的初始矢量，必须和服务器端一致
                                          
                                          textBytes,
                                          
                                          dataLength,              // 数据的大小
                                          
                                          buffer, 1024,
                                          
                                          &numBytesEncrypted);
    
    if (cryptStatus == kCCSuccess) {
        
        NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
        
        //ciphertext = [data base64Encoding];
        ciphertext = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
        
    }
    
    return ciphertext;
    
}

@end
